import argparse  # 导入argparse模块，用于解析命令行参数

# 创建参数解析器对象，描述信息为"A project implemented in pyTorch"（一个基于PyTorch实现的项目）
parser = argparse.ArgumentParser(description="A project implemented in pyTorch")

# =========================== 学习/训练相关配置 ============================
# 训练轮数（n_epoch）：整数类型，未指定默认值，需在命令行中显式传入
parser.add_argument('--n_epoch', type=int)
# 批处理大小（batch_size）：整数类型，短参数为-b，用于指定训练时的批次大小
parser.add_argument('-b', '--batch_size', type=int)
# 测试批处理大小（test_batch_size）：整数类型，用于指定测试时的批次大小
parser.add_argument('--test_batch_size', type=int)
# 学习率（lr）：浮点类型，用于设置优化器的初始学习率
parser.add_argument('--lr', type=float)
# GPU设备：字符串类型，用于指定使用的GPU编号（如"0"或"0,1"表示使用第0块或第0、1块GPU）
parser.add_argument('--gpu', type=str)
# 快照前缀（snapshot_pref）：字符串类型，用于指定模型保存路径的前缀（如保存模型文件的路径前缀）
parser.add_argument('--snapshot_pref', type=str)
# 恢复训练（resume）：字符串类型，默认值为空，用于指定需要加载的模型 checkpoint 路径（从该 checkpoint 继续训练）
parser.add_argument('--resume', type=str, default="")
# 评估模式（evaluate）：布尔类型，当命令行中出现该参数时，值为True，用于指定仅进行模型评估（不训练）
parser.add_argument('--evaluate', action='store_true')
# 梯度裁剪阈值（clip_gradient）：浮点类型，用于限制梯度的最大范数（防止梯度爆炸）
parser.add_argument('--clip_gradient', type=float)
# 损失权重（loss_weights）：浮点类型，用于指定不同损失项的权重（平衡多任务损失时使用）
parser.add_argument('--loss_weights', type=float)
# 起始轮数（start_epoch）：整数类型，用于指定训练的起始轮次（通常配合resume使用）
parser.add_argument('--start_epoch', type=int)
# 注释掉的动量参数（momentum）：默认值0.9，浮点类型，用于优化器的动量参数（如SGD的动量）
# parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
#                     help='momentum')
# 权重衰减（weight_decay）：浮点类型，短参数为--wd，用于设置正则化的权重衰减系数（默认5e-4）
parser.add_argument('--weight_decay', '--wd', type=float,
                    metavar='W', help='weight decay (default: 5e-4)')

# =========================== 显示/日志相关配置 ============================
# 打印频率（print_freq）：整数类型，用于指定训练过程中日志信息的打印间隔（如每多少个批次打印一次）
parser.add_argument('--print_freq', type=int)
# 保存频率（save_freq）：整数类型，用于指定模型保存的间隔（如每多少个轮次保存一次模型）
parser.add_argument('--save_freq', type=int)
# 评估频率（eval_freq）：整数类型，用于指定训练过程中模型评估的间隔（如每多少个轮次评估一次）
parser.add_argument('--eval_freq', type=int)